package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IAttendanceDataTempDAO;
import org.jsola.hr.dto.AttendanceDataTempAddDTO;
import org.jsola.hr.dto.AttendanceDataTempUpdateDTO;
import org.jsola.hr.entity.AttendanceDataTempDO;
import org.jsola.hr.query.AttendanceDataTempQuery;
import org.jsola.hr.vo.AttendanceDataAllAndErrorVO;
import org.jsola.hr.vo.AttendanceDataTempListVO;
import org.jsola.hr.vo.AttendanceDataTempVO;
import org.jsola.hr.vo.ParseAttendanceDataTempExcelVO;
import org.jsola.user.core.TokenUser;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.Date;
import java.util.List;


/**
 * 临时考勤数据
 *
 * @author zhr
 */
public interface IAttendanceDataTempService extends IService<IAttendanceDataTempDAO, AttendanceDataTempDO> {

    /**
     * 根据记录ID考勤记录导入月工资表
     * @param tokenUser 当前用户
     * @return 导入成功的数量
     */
    Integer importMonthSallary(AttendanceDataTempQuery attendanceDataTempQuery, TokenUser tokenUser);

    /**
     * 根据记录ID考勤记录导入月工资表(sa_employee_salary_new)
     * @param tokenUser 当前用户
     * @return 导入成功的数量
     */
    Integer importMonthSalary(AttendanceDataTempQuery attendanceDataTempQuery, TokenUser tokenUser);

    /**
     * 导出错误数据通过记录ID(新)
     * @param recordId 记录ID
     * @param tokenUser 当前用户
     * @return 错误数据Excel
     */
    AttendanceDataTempVO errorDataExcelByRecordId(String recordId, TokenUser tokenUser);

    /**
     * 导出错误数据通过记录ID
     * @param recordId 记录ID
     * @param tokenUser 当前用户
     * @return 临时考勤数据展示对象
     */
    AttendanceDataTempVO getErrorDataExcel(String recordId, TokenUser tokenUser);

    /**
     * 获取某条考勤工资信息
     * @param attendanceDataTempId 考勤工资详情ID
     * @param tokenUser 当前用户
     * @return 临时考勤数据展示对象
     */
    AttendanceDataTempVO workHoursInfoById(String attendanceDataTempId, TokenUser tokenUser);

    /**
     * 获取某条考勤工资信息
     * @param attendanceDataTempId 考勤工资详情ID
     * @param tokenUser 当前用户
     * @return 临时考勤数据展示对象
     */
    AttendanceDataTempVO getWorkHoursInfoById(String attendanceDataTempId, TokenUser tokenUser);

    /**
     * 分页展示某考勤记录的详情(新)
     * @param attendanceDataTempQuery 考勤工资记录ID
     * @param tokenUser 当前用户
     * @return 临时考勤数据展示对象
     */
    Page<AttendanceDataTempListVO> attendanceDataInfo(AttendanceDataTempQuery attendanceDataTempQuery, TokenUser tokenUser);


    /**
     * 分页展示某考勤记录的详情
     * @param attendanceDataTempQuery 考勤工资记录ID
     * @param tokenUser 当前用户
     * @return 临时考勤数据展示对象
     */
    Page<AttendanceDataTempListVO> getAttendanceDataInfo(AttendanceDataTempQuery attendanceDataTempQuery, TokenUser tokenUser);

    /**
     * 根据考勤工资记录ID计算相关的工资影响(新)
     * @param recordId 考勤工资记录ID
     * @param tokenUser 当前用户
     * @return 计算成功的数据条数
     */
    Integer newCalculateSalary(String recordId, TokenUser tokenUser);

    /**
     * 根据考勤工资记录ID计算相关的工资影响
     * @param recordId 考勤工资记录ID
     * @param tokenUser 当前用户
     * @return 计算成功的数据条数
     */
    Integer calculateSalary(String recordId, TokenUser tokenUser);

    /**
     * 处理解析考勤工资表后的错误数据
     * @param attendanceDataTempQuery 临时考勤数据查询参数
     * @param tokenUser 当前用户
     * @return 处理成功条数
     */
    Integer handleError(AttendanceDataTempQuery attendanceDataTempQuery, TokenUser tokenUser);

    /**
     * 查询某次导入的考勤工资记录，需要页数详情，用工单位id，记录ID
     * @param attendanceDataTempQuery 临时考勤数据查询参数
     * @param tokenUser 当前用户
     * @return 某次导入的考勤工资记录
     */
    AttendanceDataAllAndErrorVO getAttendanceDataTempAllAndError(AttendanceDataTempQuery attendanceDataTempQuery, TokenUser tokenUser);


    /**
     * 导入excel(新)
     * @param file 上传的文件
     * @param attendanceDataTempQuery 临时考勤数据查询参数
     * @param tokenUser 当前用户
     * @return 返回解析excel后的数据
     */
    AttendanceDataAllAndErrorVO newImportFile(MultipartFile file, AttendanceDataTempQuery attendanceDataTempQuery, TokenUser tokenUser);


    /**
     * 导入excel
     * @param file 上传的文件
     * @param attendanceDataTempQuery 临时考勤数据查询参数
     * @param tokenUser 当前用户
     * @return 返回解析excel后的数据
     */
    AttendanceDataAllAndErrorVO importFile(MultipartFile file, AttendanceDataTempQuery attendanceDataTempQuery, TokenUser tokenUser);

    /**
     * 新增临时考勤数据
     * @param attendanceDataTempAddDTO 新增临时考勤数据DTO
     * @param tokenUser 当前用户
     * @return 临时考勤数据详情信息
     */
    AttendanceDataTempVO save(AttendanceDataTempAddDTO attendanceDataTempAddDTO, TokenUser tokenUser);

    /**
     * 修改临时考勤数据
     * @param attendanceDataTempUpdateDTO 修改临时考勤数据DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(AttendanceDataTempUpdateDTO attendanceDataTempUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除临时考勤数据，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param attendanceDataTempIds 临时考勤数据id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...attendanceDataTempIds);

    /**
     * 根据临时考勤数据id查找
     * @param attendanceDataTempId 临时考勤数据id
     * @param siteId 所属站点id
     * @return 临时考勤数据详情信息
     */
    AttendanceDataTempVO selectById(String attendanceDataTempId, String siteId);

    /**
     * 查询临时考勤数据
     * @param attendanceDataTempQuery 查询条件
     * @param siteId 所属站点id
     * @return 临时考勤数据列表信息
     */
    List<AttendanceDataTempListVO> select(AttendanceDataTempQuery attendanceDataTempQuery, String siteId);

    /**
    * 查询临时考勤数据记录数
    * @param attendanceDataTempQuery 查询条件
    * @param siteId 所属站点id
    * @return 临时考勤数据记录数
    */
    int selectCount(AttendanceDataTempQuery attendanceDataTempQuery, String siteId);

    /**
     * 分页查询临时考勤数据
     * @param attendanceDataTempQuery 查询条件
     * @param siteId 所属站点id
     * @return 临时考勤数据列表信息
     */
    Page<AttendanceDataTempListVO> selectPage(AttendanceDataTempQuery attendanceDataTempQuery, String siteId);


    /**
     * 根据临时考勤数据id查找
     * @param attendanceDataTempId 临时考勤数据id
     * @param siteId 所属站点id
     * @return 临时考勤数据
     */
    AttendanceDataTempDO selectDOById(String attendanceDataTempId, String siteId);

    /**
     * 查询临时考勤数据
     * @param attendanceDataTempQuery 查询条件
     * @param siteId 所属站点id
     * @return 临时考勤数据列表
     */
    List<AttendanceDataTempDO> selectDO(AttendanceDataTempQuery attendanceDataTempQuery, String siteId);



}


